package org.test.jiazi_1.common.utils;


import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;


/**
 * @Author: 唐文涛
 * @CreateTime: 2024-11-26
 * @Description:
 * @Version: 1.0
 */
@Slf4j
public class ExtraScore {
    public static int convertEthnicNameToCode(String ethnicName) {
        Map<String, Integer> ethnicMap = new HashMap<>();
        ethnicMap.put("汉族", 1);
        ethnicMap.put("蒙古族", 2);
        ethnicMap.put("回族", 3);
        ethnicMap.put("藏族", 4);
        ethnicMap.put("维吾尔族", 5);
        ethnicMap.put("苗族", 6);
        ethnicMap.put("彝族", 7);
        ethnicMap.put("壮族", 8);
        ethnicMap.put("布依族", 9);
        ethnicMap.put("朝鲜族", 10);
        ethnicMap.put("满族", 11);
        ethnicMap.put("侗族", 12);
        ethnicMap.put("瑶族", 13);
        ethnicMap.put("白族", 14);
        ethnicMap.put("土家族", 15);
        ethnicMap.put("哈尼族", 16);
        ethnicMap.put("哈萨克族", 17);
        ethnicMap.put("傣族", 18);
        ethnicMap.put("黎族", 19);
        ethnicMap.put("傈僳族", 20);
        ethnicMap.put("佤族", 21);
        ethnicMap.put("畲族", 22);
        ethnicMap.put("高山族", 23);
        ethnicMap.put("拉祜族", 24);
        ethnicMap.put("水族", 25);
        ethnicMap.put("东乡族", 26);
        ethnicMap.put("纳西族", 27);
        ethnicMap.put("景颇族", 28);
        ethnicMap.put("柯尔克孜族", 29);
        ethnicMap.put("土族", 30);
        ethnicMap.put("达斡尔族", 31);
        ethnicMap.put("仫佬族", 32);
        ethnicMap.put("羌族", 33);
        ethnicMap.put("布朗族", 34);
        ethnicMap.put("撒拉族", 35);
        ethnicMap.put("毛南族", 36);
        ethnicMap.put("仡佬族", 37);
        ethnicMap.put("锡伯族", 38);
        ethnicMap.put("阿昌族", 39);
        ethnicMap.put("普米族", 40);
        ethnicMap.put("塔吉克族", 41);
        ethnicMap.put("怒族", 42);
        ethnicMap.put("乌孜别克族", 43);
        ethnicMap.put("俄罗斯族", 44);
        ethnicMap.put("鄂温克族", 45);
        ethnicMap.put("德昂族", 46);
        ethnicMap.put("保安族", 47);
        ethnicMap.put("裕固族", 48);
        ethnicMap.put("京族", 49);
        ethnicMap.put("塔塔尔族", 50);
        ethnicMap.put("独龙族", 51);
        ethnicMap.put("鄂伦春族", 52);
        ethnicMap.put("赫哲族", 53);
        ethnicMap.put("门巴族", 54);
        ethnicMap.put("珞巴族", 55);
        ethnicMap.put("基诺族", 56);

        return ethnicMap.getOrDefault(ethnicName, -1);
    }

    public static String getLevel(Double score) {
        if (score >= 90) {
            return "优秀";
        } else if (score >= 80) {
            return "良好";
        } else if (score >= 60) {
            return "及格";
        } else {
            return "不及格";
        }
    }

    //男女1 2转换
    public static String getSex(Integer sex) {
        switch (sex) {
            case 1:
                return "男";
            case 2:
                return "女";
            default:
                return "未知";
        }
    }

    //判断体育附加分
    public static Integer getExtraScore(Double score) {

        if (score != null) {
            if (score == 0) {
                return 0;
            }
            if (score > 100) {
                return (int) (score - 100);
            }
        }
        return 0;
    }

    //将秒转化为分秒格式
    public static String getTime(Integer time) {
        if (time == null) {
            return "";
        }
        int minutes = time / 60; // 分钟部分
        int seconds = time % 60; // 秒部分

        return String.format("%01d'%02d", minutes, seconds);
    }

    public static Double limitScore(Double score) {
        return score < 100 ? score : 100;
    }


    /**
     * @Author: 金官辉
     * @CreateTime: 2025-5-14
     * @Description: 对于传入的时间字符串参数timeString，解决了原先非法的正则表达式的问题
     * @Version: 1.0
     */
    //跑步时间转换   5′00 -> 300
    //5′49
    public static int getRunTimeString(String timeString) {
        if (timeString.equals("0") || timeString.equals(" ")) {
            return 0;
        }
        if (timeString.isEmpty()) {
            return 0;
        }
        // 移除所有非数字字符，除了第一个非数字字符（可能是分隔符）
        //timeString = timeString.replaceAll("[^0-9]+", " ").trim().replaceAll("\\b\\s+\\b", " ");
        timeString = timeString.replaceAll("[^0-9]+", " ").trim().replaceAll("\\s+", " ");
        String[] parts = timeString.split(" ");

        if (parts.length != 2) {
            log.info("时间字符串为:{}", timeString);
            if (timeString.isEmpty()) {
                System.out.println("时间字符串为空");
                return 0;
            }
            System.out.println(timeString);
            throw new IllegalArgumentException("输入的时间格式不正确，请确保格式为 '分钟′秒'，如 '3′30' 或者 '3'30'");
        }

        try {
            int minutes = Integer.parseInt(parts[0]); // 分钟部分
            String secondsStr = parts[1]; // 秒部分字符串

            // 补全秒部分为两位数
            if (secondsStr.length() == 1) {
                secondsStr += "0";
            }

            int seconds = Integer.parseInt(secondsStr); // 秒部分

            return minutes * 60 + seconds; // 转换为总秒数
        } catch (NumberFormatException e) {
            System.out.println(timeString);
            throw new IllegalArgumentException("解析时间字符串中的数字部分出现错误，请确保分钟和秒数部分都是合法的数字");
        }
    }

    //跑步时间转换
    public static String getRunTime(Integer time) {
        if (time == null) {
            return null;
        }
        int minute = time / 60;
        int second = time % 60;
        // 使用 String.format 来简化拼接
        return String.format("%d′%02d", minute, second);
    }

    //进行性别转换
    public static String conversionSex(Integer sex) {
        return sex == 1 ? "男" : "女";
    }

    //出生日期转换
    public static String conversionBirthday(String birthday) {
        if (null == birthday) {
            return null;
        }
        return birthday.substring(0, 4) + "/" + birthday.substring(4, 6) + "/" + birthday.substring(6, 8);
    }


    /**
     * 通用附加分计算方法
     *
     * @param baseScore 基础分数
     * @param setter    分数设置方法引用
     */
    public static void setExtraScoreIfExceed(Double baseScore, Consumer<Integer> setter) {

        if (baseScore != null && baseScore > 100) {
            setter.accept((int) (baseScore - 100));
        } else {
            setter.accept(0); // 或保持原值不变
        }
    }


}